# -*- coding: utf-8 -*-
def make_response(code, msg, data=None):
    """
    响应数据构造函数

    :param code: int. 错误码
    :param msg: str. 错误信息
    :param data: dict or none. 其他信息，用于传递一些数据信息分析错误，一般为None。
    :return:
    """
    resp = {
        'code': code,
        'msg': msg
    }

    if data is not None:
        resp.update({'data': data})

    return resp


class ResponseMaker:
    """
    自定义响应

    1: 成功
    1xxxx: 业务错误
    2xxxx: 系统错误
    """

    # 成功
    @staticmethod
    def success(data=None):
        """成功"""
        resp = make_response(200, "OK", data)

        return resp, 200

    # 1xxxx，业务返回值
    @staticmethod
    def not_exist(obj_name):
        """对象不存在"""
        if not obj_name:
            raise Exception("obj_name不能为空")

        err_msg = f"{obj_name}不存在"
        return make_response(10001, err_msg), 200

    @staticmethod
    def user_password_error():
        return make_response(10002, "用户密码错误"), 200

    @staticmethod
    def user_account_already_exist():
        return make_response(10003, "用户账号已存在"), 200

    @staticmethod
    def user_account_not_found():
        return make_response(10004, "用户账号不存在"), 200

    @staticmethod
    def login_expired():
        # 登录过期，提示重新登陆
        return make_response(10005, "登录信息已过期，请重新登陆"), 200

    @staticmethod
    def token_missing():
        return make_response(10006, "请求头中缺少token"), 401

    @staticmethod
    def token_error():
        return make_response(10007, "token错误"), 401

    @staticmethod
    def token_expire():
        return make_response(10008, "token过期，请重新登陆"), 401

    @staticmethod
    def no_commodity_for_pay():
        return make_response(10009, "购物车中无商品可结算"), 200

    @staticmethod
    def account_format_error():
        return make_response(10010, "account格式错误"), 200
